package cn.wzut.edut.service;

import cn.wzut.edut.dao.inf.ClassCollege;
import cn.wzut.edut.dao.inf.Information;
import cn.wzut.edut.dao.pojo.table.PtyCollege;
import cn.wzut.edut.dao.pojo.table.PtyStu;
import cn.wzut.edut.dao.pojo.table.PtyTeacher;
import cn.wzut.edut.jwt.JWTUtils;
import cn.wzut.edut.pojo.CollegeInfo;
import cn.wzut.edut.pojo.CollegeModInfo;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CollegeService {

    @Autowired
    Information information;

    @Autowired
    ClassCollege classCollege;

    @Autowired
    ClientService clientService;

    /**
     * 获取全部学院列表
     * @param token
     * @return
     */
    public List<PtyCollege> getCollegeList(String token){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            return classCollege.selectAllCollege();
        }
        return null;
    }

    /**
     * 获取指定个数指定页的学院列表
     * @param token
     * @return
     */
    public List<PtyCollege> getCollegeListByPage(String token, int page, int num){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            //获取列表
        }
        return null;
    }

    /**
     * 添加学院
     * @param token
     * @return
     */
    public boolean addCollege(String token, CollegeInfo collegeInfo){
        try {
            // 解析token
            DecodedJWT decode = JWTUtils.decode(token);
            // 判断是否是后台管理端发送的请求
            if (decode.getClaim("end").asString().equals("B")) {
                // 获取用户id
                String userId = decode.getClaim("userid").asString();
                // 判断用户是否拥有菜单9（用户管理）权限
                if (clientService.selectRole(userId, "9")) {
                    // 学院信息写入学院表
                    String id = classCollege.insertPtyCollege(new PtyCollege("1", collegeInfo.getCollege_name()));
                    // 更新学生信息中的学院信息
                    if (collegeInfo.getStus() != null) {
                        for(PtyStu stu : collegeInfo.getStus()){
                            information.updatePtyStuCollege(stu.getId(), id);
                        }
                    }
                    // 更新教师信息中的学院信息
                    if (collegeInfo.getTeachers() != null) {
                        for(PtyTeacher teacher : collegeInfo.getTeachers()){
                            information.updatePtyTeacherCollege(teacher.getId(), id);
                        }
                    }
                }
            }
        }
        catch(Exception e){}
        return false;
    }

    /**
     * 删除学院
     * @param token
     * @return
     */
    public boolean delCollege(String token, String[] collegeids) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单9（用户管理）权限
            if(clientService.selectRole(userId, "9")) {
                for(String collegeid : collegeids){
                    if(!classCollege.delPtyCollege(collegeid)){
                        return false;
                    }
                }
                return true;
            }
        }
        return false;
    }

    /**
     * 修改学院
     * @param token
     * @return
     */
    public boolean modCollege(String token, CollegeModInfo collegeModInfo) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单9（用户管理）权限
            if(clientService.selectRole(userId, "9")) {
                // 更新学院表信息
                classCollege.updatePtyCollege(new PtyCollege(collegeModInfo.getCollege_id(), collegeModInfo.getCollege_name()));
                // 更新添加学生信息
                if(collegeModInfo.getAdd_stu_ids() != null) {
                    for (String add_stu_id : collegeModInfo.getAdd_stu_ids()) {
                        information.updatePtyStuCollege(add_stu_id, collegeModInfo.getCollege_id());
                    }
                }
                // 更新删除学生信息
                if(collegeModInfo.getDel_stu_ids() != null) {
                    for (String del_stu_id : collegeModInfo.getAdd_stu_ids()) {
                        information.updatePtyStuCollege(del_stu_id, "0");
                    }
                }
                // 更新添加教师信息
                if(collegeModInfo.getAdd_teacher_ids() != null) {
                    for (String add_teacher_id : collegeModInfo.getAdd_teacher_ids()) {
                        information.updatePtyTeacherCollege(add_teacher_id, collegeModInfo.getCollege_id());
                    }
                }
                // 更新删除教师信息
                if(collegeModInfo.getDel_teacher_ids() != null) {
                    for (String del_teacher_id : collegeModInfo.getAdd_teacher_ids()) {
                        information.updatePtyTeacherCollege(del_teacher_id, "0");
                    }
                }
                return true;
            }
        }
        return false;
    }

    /**
     * 根据学院id查询学院信息
     * @param token
     * @return
     */
    public CollegeInfo getCollegeById(String token, String collegeid) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单9（用户管理）权限
            if(clientService.selectRole(userId, "9")) {
                // 返回学院表数据和该学院下学生和教师的数据
                return new CollegeInfo(classCollege.selectCollege(collegeid).getCollegeName(), information.selectStuInCollege(collegeid),information.selectTeacherInCollege(collegeid));
            }
        }
        return null;
    }

}
